package com.casa_apoio.suport;

import com.casa_apoio.model.dao.HospedagemDAO;
import com.casa_apoio.model.entity.Hospedagem;
import com.casa_apoio.util.DateUtils;
import com.casa_apoio.util.FacesContextUtil;
import com.casa_apoio.util.RelatorioUtil;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.StreamedContent;

@ManagedBean
@RequestScoped
public class BbRelatorioHospedagemPeriodo implements Serializable {

    private StreamedContent arquivoRetorno;
    private Integer cidade;
    private int mes;
    private int ano;
    private List<Hospedagem> hospedagens;

    private HospedagemDAO<Hospedagem> hospedagemDAO() {
        HospedagemDAO<Hospedagem> hospedagemDAO = new HospedagemDAO<Hospedagem>(Hospedagem.class, FacesContextUtil.getRequestSession());
        return hospedagemDAO;
    }

    public String hospedagemPorPeriodoMunicipio() {
        hospedagens = hospedagemDAO().hospedagemPorPeriodoMunicipio(cidade, getDataInicial(), getDataFinal());
        if (hospedagens.isEmpty()) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Não foram encontrado hopedagem para este municipio nesse mes de referenia", ""));
        }
        return null;
    }

    private Integer formataAno(Date data) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        return Integer.parseInt(sdf.format(data));
    }

    private Integer formataMes(Date data) {
        SimpleDateFormat sdf = new SimpleDateFormat("MM");
        return Integer.parseInt(sdf.format(data));
    }

    public StreamedContent getArquivoRetorno() {
        String nomeRelatorioJasper = "HospedagemPorPeriodo";
        String nomeRelatorioSaida = "Relatorio_por_cidade";

        System.out.println("Iniciou o HeshMap");
        HashMap parametros = new HashMap();

        System.out.println("DATA_INICIO" + getDataInicial());
        System.out.println("DATA_FINAL" + getDataFinal());
        System.out.println("ID_CIDADE" + getCidade());

        parametros.put("ID_CIDADE", this.getCidade());
        parametros.put("DATA_INICIO", getDataInicial());
        parametros.put("DATA_FINAL", getDataFinal());

        RelatorioUtil relatorioUtil = new RelatorioUtil();

        try {
            this.arquivoRetorno = relatorioUtil.geraRelatorio(parametros, nomeRelatorioJasper, nomeRelatorioSaida, RelatorioUtil.RELATORIO_PDF);
        } catch (Exception e) {
        }

        return arquivoRetorno;
    }

    public Integer getCidade() {
        return cidade;
    }

    public void setCidade(Integer cidade) {
        this.cidade = cidade;
    }

    public void setArquivoRetorno(StreamedContent arquivoRetorno) {
        this.arquivoRetorno = arquivoRetorno;
    }

    public List<Hospedagem> getHospedagens() {
        return hospedagens;
    }

    public void setHospedagens(List<Hospedagem> hospedagens) {
        this.hospedagens = hospedagens;
    }

    public int getMes() {
        if (mes == 0) {
            mes = formataMes(new Date());
        }
        return mes;
    }

    public void setMes(int mes) {
        this.mes = mes;
    }

    public int getAno() {
        if (ano == 0) {
            ano = formataAno(new Date());
        }
        return ano;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }

    public Date getDataInicial() {
        Calendar inicio = Calendar.getInstance();
        inicio.set(ano, mes - 1, 1);
        return inicio.getTime();
    }

    public Date getDataFinal() {
        Calendar fim = Calendar.getInstance();
        fim.set(ano, mes - 1, DateUtils.getMaxday(mes, ano));
        return fim.getTime();
    }
}
